package spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import spring.controller.dto.PessoaDTO;
import spring.model.Pessoa;
import spring.service.PessoaService;

import javax.inject.Inject;
import javax.validation.Valid;

@Controller
public class PessoaController {

	@Inject
	private PessoaService pessoaService;

	@RequestMapping("/")
	public String listAll(Model model) {
		model.addAttribute("pessoas", pessoaService.listAll());
		return "listar";
	}

	@RequestMapping("form")
	public String form(@RequestParam(required = false) Pessoa pessoa, Model model) {
		model.addAttribute("pessoa", new PessoaDTO(pessoa != null ? pessoa : new Pessoa()));
		return "form";
	}

	@RequestMapping(value = "form", method = RequestMethod.POST)
	public String form(@Valid @ModelAttribute("pessoa") PessoaDTO pessoa, BindingResult result) {
		if (result.hasErrors()) return "form";
		pessoaService.save(pessoa.getPessoa());
		return "redirect:/";
	}

	@RequestMapping("excluir")
	public String excluir(@RequestParam Pessoa pessoa) {
		pessoaService.excluir(pessoa);
		return "redirect:/";
	}

	@RequestMapping("maiores")
	public String maioresIdade(Model model) {
		model.addAttribute("pessoas", pessoaService.listMaioresIdade());
		return "listar";
	}

	@RequestMapping("menores")
	public String menoresIdade(Model model) {
		model.addAttribute("pessoas", pessoaService.listMenoresIdade());
		return "listar";
	}

}
